其他
40张图看懂分布式追踪系统原理及实践
The following article is from 码海 Author 码海
1、《往期精选优秀博文都在这里了!》 2、阿里终面:分布式事务原理 3、为什么在系统中不推荐双写? 4、Thread.sleep(0) 到底有什么用? 5、为什么阿里规定需要在事务注解 @Transactional 中指定 rollbackFor? 前言
分布式追踪系统原理及作用 SkyWalking的原理及架构设计 我司在分布式调用链上的实践
分布式追踪系统的原理及作用
接口的 RT 你怎么知道? 是否有异常响应? 主要慢在哪里?
单体架构
微服务架构
排查问题难度大,周期长 特定场景难复现 系统性能瓶颈分析较难
自动采取数据 分析数据产生完整调用链:有了请求的完整调用链,问题有很大概率可复现 数据可视化:每个组件的性能可视化,能帮助我们很好地定位系统的瓶颈,及时找出问题所在
分布式调用链标准 - OpenTracing
Trace:一个完整请求链路 Span:一次调用过程(需要有开始时间和结束时间) SpanContext:Trace 的全局上下文信息, 如里面有traceId
全局 trace_id:这是显然的,这样才能把每一个子调用与最初的请求关联起来 span_id: 图中的 0,1,1.1,2,这样就能标识是哪一个调用 parent_span_id:比如 b 调用 d 的 span_id 是 1.1,那么它的 parent_span_id 即为 a 调用 b 的 span_id 即 1,这样才能把两个紧邻的调用关联起来。
怎么自动采集 span 数据:自动采集,对业务代码无侵入 如何跨进程传递 context traceId 如何保证全局唯一 请求量这么多采集会不会影响性能
SkyWalking的原理及架构设计
怎么自动采集 span 数据
如何跨进程传递 context
traceId 如何保证全局唯一
图示: snowflake 算法生成的 id
请求量这么多,全部采集会不会影响性能?
SkyWalking 的基础架构
SkyWalking 的性能如何
对多语言的支持,组件丰富:目前其支持 Java, .Net Core, PHP, NodeJS, Golang, LUA 语言,组件上也支持dubbo, mysql 等常见组件,大部分能满足我们的需求。
扩展性:对于不满足的插件,我们按照 SkyWalking 的规则手动写一个即可,新实现的插件对代码无入侵。
我司在分布式调用链上的实践
SkyWalking 在我司的应用架构
我司对 SkyWalking 作了哪些改造和实践
预发环境由于调试需要强制采样 实现更细粒度的采样? 日志中嵌入traceId 自研实现了 SkyWalking 插件
预发环境由于调试需要强制采样
实现更细粒度的采样?
日志中如何嵌入traceId?
我司自研了哪些 skywalking 插件
插件定义类: 指定插件的定义类,最终会根据这里的定义类打包生成 plugin Instrumentation: 指定切面,切点,要对哪个类的哪个方法进行增强 Interceptor,指定步骤 2 中要在方法的前置,后置还是异常中写增强逻辑
dubbo=org.apache.skywalking.apm.plugin.asf.dubbo.DubboInstrumentation